package com.zjbd.douyangsearch.listener;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;


/**
 * 收听MQ的news主题的广播
 */
@Slf4j
@Component  // 交给 Spring 管理
// 关键配置：messageModel = MessageModel.BROADCASTING（广播模式）
@RocketMQMessageListener(
        topic = "news-add-topic",  // 必须与生产者发送的 topic 一致
        consumerGroup = "${spring.application.name}-broadcast-consumer-group",  // 消费者组
        messageModel = MessageModel.BROADCASTING,  // 开启广播模式（默认是集群模式 CLUSTERING）
        consumeTimeout = 3000L  // 可选：消费超时时间（ms，默认15000）
)
public class NewsListener implements RocketMQListener<String> {  // 泛型 String 对应生产者发送的消息类型

    /**
     * 消息消费逻辑（广播模式下，所有消费者实例都会执行此方法）
     * @param message 生产者发送的消息体（与发送类型一致）
     */
    @Override
    public void onMessage(String message) {
        try {
            log.info("广播消费者收到消息 | 消息内容: {}", message);
            log.info("处理广播消息：" + message);

        } catch (Exception e) {
            // 注意：广播模式下，消费失败默认不会重试（需手动处理重试逻辑，如存入死信队列）
            log.error("广播消息消费失败 | 消息内容: {}, 异常原因: {}", message, e.getMessage(), e);
        }
    }
}